#ifndef __PRINER_H
#define __PRINER_H

#include <common.h>
#include <generator.h>
#include <ast.h>

#include <string>
#include <vector>

class Printer : public Generator {
public:
    std::vector<std::string> content;
    int _nested = 0;

public:
    void gen(BlockStat* ptr) override;
    void gen(ReturnStat* ptr) override;
    void gen(IfStat* ptr) override;

    void gen(UnaryOpStat* ptr) override;
    void gen(BinaryOpStat* ptr) override;
    void gen(TernaryOpStat* ptr) override;

    void gen(NameStat* ptr) override;
    void gen(LiteralIntegerStat* ptr) override;

    void gen(ParamStat *ptr) override;
    void gen(FunctionStat* ptr) override;

    void gen(VariableStat *ptr) override;
    void gen(VariableDefineStat* ptr) override;

    void gen(ForStat* ptr) override;

    void gen(StructStat *ptr) override;

    void gen(VarStat *ptr) override;

    void gen(GotoStat *ptr) override;

    void gen(WhileStat *ptr) override;
    void gen(DoWhileStat *ptr) override;
    void gen(BreakStat *ptr) override;
    void gen(ContinueStat *ptr) override;
    void gen(LabelStat *ptr) override;

    void genType(Type ptr) override;
};


#endif // __PRINER_H
